package es.javamyadmin.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

import es.javamyadmin.beans.LoginBean;


public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public LoginServlet() {
        super();
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("---> En LoginServlet\n");
		
		String user;     
        String pass;
        String host;
        String port;
        String recordar = "";
        
        if(request.getParameter("logear") != null){
        	String datos[] = request.getParameter("logear").split(",");
        	user = datos[0];
        	pass = datos[1];
        	host = datos[2];
        	port = datos[3];
        	System.out.println(user + " - " + pass + " - " + host + " - " + port);
        	System.out.println("Logeado por cookie");
        }
        else{
        	user = request.getParameter("usuario");     
            pass = request.getParameter("password");
            host = request.getParameter("servidor");
            port = request.getParameter("puerto");
            recordar = request.getParameter("recordar");
            System.out.println("Logeado por formulario");
        }
        String server = null;
        String serverVersion = null;
        String userSQL = null;
        
    	Connection con=null;
    	
    	
    	boolean error = false;
    	
    	if(user!="" & pass!="" & host!="" & port!=""){
    		System.out.println("entro en if");
    		try {
                Class.forName("com.mysql.jdbc.Driver");                
          	    con=DriverManager.getConnection("jdbc:mysql://"+host+":"+port+"/", user, pass);
          	    	
          	    DatabaseMetaData dbmd = con.getMetaData();
          	    serverVersion = dbmd.getDatabaseProductVersion();
          	    server = dbmd.getDatabaseProductName();
          	    userSQL = dbmd.getUserName();
			} catch (Exception e){				
				error= true;				
			}
    		
    		
    	}else{
    		error = true;
    	}
    	/*si no ha habido ningún error cargo el Bean con los datos que llegan del login*/
        if(error!=true){
        	
        	if(recordar != null){
    			Cookie login = new Cookie("login", user + "," + pass + "," + host + "," + port);
    			login.setMaxAge(1*30*24*60*60);
    			login.setPath("/");
    			response.addCookie(login);
    		}
        	
        	LoginBean datosLogin = new LoginBean();
        	
        	try {
        		BeanUtils.populate(datosLogin, request.getParameterMap());
        	} catch (IllegalAccessException | InvocationTargetException e) {
                System.out.println("error al cargar el bean");
        		e.printStackTrace();
        	}
        	
        	request.getSession().setAttribute("datosLogin", datosLogin);
        	
        	/*Estos datos lo meto de forma manual porque no llegan desde el formulario de login*/
        	datosLogin.setAcceso("si");
        	datosLogin.setServer(server);
        	datosLogin.setServerVersion(serverVersion);
        	datosLogin.setUserSQL(userSQL);
	        	if(request.getParameter("logear") != null){
	        		datosLogin.setPassword(pass);
	        		datosLogin.setPuerto(port);
	        		datosLogin.setUsuario(user);
	        		datosLogin.setServidor(host);
	        		System.out.println("datos login entrados a mano");
	        	}
        	/*Redirijo a esta página  donde mostraré los datos almacenados en el bean*/
        	request.getRequestDispatcher("jsp/inicio.jsp").forward(request,response);	
        	
        }else{
        	RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
			request.setAttribute("error", "Los datos de Acceso no son válidos");
			rd.forward(request, response);
        }
                            
	}

}